Функция визуализации или шаблон не определены в компоненте: анонимный - PullRequest
0 голосов
/ 24 января 2019

У меня такая проблема, после перезагрузки страницы возникает ошибка. "Функция рендеринга или шаблон не определены в компоненте: анонимный". Я думаю, что ошибка связана с socket.io. Что означает эта ошибка не на локальном компьютере, а на производстве. dev версия ошибка

server.js

const APP_ENV = require('./.env.js')
const { Nuxt, Builder } = require('nuxt')
const app = require('express')()
let server = require('http').Server(app)

if(APP_ENV.ssl) {
  const fs = require('fs')
  const options = {
    key: fs.readFileSync(APP_ENV.ssl_key),
    cert: fs.readFileSync(APP_ENV.ssl_cert)
  }
  server = require('https').Server(options, app)
}

const port = process.env.PORT || APP_ENV.ws_port
const isProd = process.env.NODE_ENV === 'production'

// We instantiate Nuxt.js with the options
let config = require('./nuxt.config.js')
config.dev = !isProd

const nuxt = new Nuxt(config)
// Start build process in dev mode
if (config.dev) {
  const builder = new Builder(nuxt)
  builder.build()
}
app.use(nuxt.render)
if (APP_ENV.socket) {
  const io = require('socket.io')(server)
  const Redis = require('ioredis')
  const redis = new Redis(APP_ENV.redis.port, APP_ENV.redis.host)
  redis.psubscribe(['*'])
  redis.on('pmessage', function (subscribe, channel, message) {
    message = JSON.parse(message)
    console.log('Server: ', subscribe, channel, message.data.message)
    io.emit(channel + ':' + message.event, message.data)
  })

  // io.on('connection', function (socket) {
  // })
}

server.listen(port, function () {
  console.log('Listening on Port ' + port)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

плагины / socket.io.js

``

import io from 'socket.io-client'

const socket = io(process.env.WS_URL)

export default socket
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

ю / index.js

module.exports = function () {
  const APP_ENV = require('../.env.js')
  const server = require('http').createServer(this.nuxt.renderer.app)

  // overwrite nuxt.listen()
  this.nuxt.listen = (port, host) => new Promise((resolve) => server.listen(port || 3000, host || 'localhost', resolve))
  // close this server on 'close' event
  this.nuxt.hook('close', () => new Promise((resolve) => server.close(resolve)))

  // Add `socket.io-client` in vendor
  this.addVendor('socket.io-client')

  if (APP_ENV.socket) {
    const io = require('socket.io')(server)
    const Redis = require('ioredis')
    const redis = new Redis(APP_ENV.redis.port, APP_ENV.redis.host)
    redis.psubscribe(['*'])
    redis.on('pmessage', function (subscribe, channel, message) {
      message = JSON.parse(message)
      console.log('Server: ', subscribe, channel, message.data.message)
      io.emit(channel + ':' + message.event, message.data)
    })

    // io.on('connection', function (socket) {
    // })
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

сообщение / index.vue


  
    
      
        
          Мои сообщения
        
<!--<div class="chat-tabs__item active">Входящие 0">{{ userMessage.count }}
--> <!--<div class="chat-tabs__item">Системные-->
{{tab.title}}
<!-- <span>1 -->
image {{ user.name[0] | uppercase }}{{ user.name[1] | uppercase }}
0" class="chat-item__new-messages">{{ user.unread }}
{{ user.name }}
<!--<div class="chat-item__last-messages" v-html="user.message">--> <!--</div>-->
<!-- 13:25 -->
{{ chatUser.name }}
<!-- <div class="chat__actions">
  • Отключить уведомения
  • Очистить историю
  • Заблокировать контакт
-->
<!-- <pre> {{ chatMessage }} ->
{{userByIdMessage (message.sender_id) .name [0] | верхний регистр}} {{userByIdMessage (message.sender_id) .name [1] | прописные буквы}}
image
{{userCurrent.user_name [0] | верхний регистр}} {{userCurrent.user_name [1] | прописные буквы}}
{{message. created_at}}
image image
{{chatUser.name}}
<! - <ul class = "interlocutor__info"> -> <! - <li>-> <! - <span>-> <! - <img src="/img/marker-icon.svg" alt=""> -> <! - </span> -> <! - 115280, Москва, -> <! - ул. Ленинская слобода, д. 19 -> <! - </li> -> <! - </ul> -> <! - <p class = "interlocutor__text"> -> <! - На сайте 5 мин., Выставленно -> <! - 10 товаров. Время с момента регистрации 3 месяца .--> <! - </p> -> <! - <a href="#" class="btn btn--xl btn--border"> -> <! - Перейти к заказу -> <! - </a> ->
<! - <div class = "container" v-else> -> <! - <div class = "row"> -> <! - <div class = "col"> -> <! - <h3> Сообщений нет -> <! - </div> -> <! - </div> -> <! - </div> -> const DOMAIN = process.env.API_DOMAIN импортировать сокет из '@ / plugins / socket.io' import {mapActions, mapGetters} из 'vuex' импортировать api из '@ / api' экспорт по умолчанию { промежуточное ПО: «аутентифицировано», данные () { вернуть { chat_mob: ложь, контакты: есть, вкладки: { входящий: { активный: правда, название: 'Входящие' }, системный: { активный: ложный, название: 'Системные' } }, virtualUser: false, baseUrl: ДОМЕН, показать: ложь, tabUsers: [], chatUser: ноль, сообщение: '', userId: null, тест: ноль, img: '', проверка: ложь } }, beforeMount () { this.getUserMessage () if (socket) { пусть база = это socket.on (this.userCurrent.id + ': new-user-message', (message) => { base.setSocketMessage ({ sender_id: message.message.from_id, сообщение: message.message.message }) base.setMessageCount ({ user_id: message.message.from_id } ) base.setUserUnreadMessage ({ count: this.userCurrent.unread_messages + 1 } ) this.scrollToBottom () }) } }, вычислено: { ... mapGetters ({ getContact: 'message / getContact', idUserMessage: 'message / id', userMessage: 'message / userMessage', chatMessage: 'message / chatMessage', userByIdMessage: 'message / userByIdMessage', userCurrent: «пользователь / пользователь» }), activeTab () { пусть index = null if (this.idUserMessage! == null && this.userMessage! == [] && this.userMessage.users! == undefined) { const user = this.userMessage.users.find (users => users.id === this.idUserMessage) index = this.userMessage.users.indexOf (пользователь) } индекс возврата } }, методы: { ... mapActions ({ setUserUnreadMessage: 'user / setUserUnreadMessage', setUsers: 'message / setUsers', addUser: 'message / addUser', setMessageCount: 'message / setMessageCount', setUnread: 'message / setUnread', getUserMessage: 'message / getUserMessage ', getChatMessage:' message / getChatMessage ', createMessage:' message / createMessage ', setStoreId:' message / setStoreId ', setSocketMessage:' message / setSocketMessage '}), checkMessage (id) {if (this.idUserMessage! =null && this.userMessage! == [] && this.userMessage.users! == undefined) {const user = this.userMessage.users.find (users => users.id === id) let index = this.userMessage.users.indexOf (пользователь) if (index === this.activeTab || id === this.userCurrent.id) вернуть true, иначе вернуть false}}, chatBack () {this.chat_mob = true this.contacts = trueconsole.log (123)}, changeTab (index) {console.log (index) для (пусть введите this.tabs) {this.tabs [ключ] .active = false} this.tabs [index] .active = true}, readMessage (id) {this.check = true const payload = {user_id: id} api.readMessage (payload) .then (() => {this.setUnread (payload)})}, chengeTab (index, id){if (window.innerWidth <768) {this.chat_mob = false} console.log (index, id) this.readMessage (id) для (пусть ключ в этом.userMessage.users) {this.tabUsers [key] = false} this.chatUser = this.userMessage.users [index] this.tabUsers [index] = true this.tabUsers.push () this.getChatMessage ({user_id: id}) this.setStoreId (id) this.userId = id this.scrollToBottom ()}, linkMessage (сообщение) {let reg = /(https?:\/\/(?:www\.|(?!www))[A-Za-Z0-9] [A-Za-Z0-9 -] + [A-Za-Z0-9] \ [^ \ s] {2} |.. WWW \ [A-Za-Z0-9] [A-Za-Z0-9 -] + [A-Za-Z0-9] \ [^ \ s] {2} | https:.?. \ / \ / (?: WWW \ | (?! WWW)) [A-Za-Z0-9] \ [^ \ s] {2} |... WWW \ [A-Za-Z0-9] \ [^ \ s] {2})/ let link = message.match (reg) let myMessage = message if (link) {myMessage = message.replace (link [0], ' ' + link [0] + '</a>')} вернуть myMessage}, асинхронноonSendMessage () {if (this.message! == '' && this.userId> 0 ||this.img! == '') {this.message = this.linkMessage (this.message) this.message = this.message + this.img const payload = {message: this.message, id: this.userId} console.log (payload) this.scrollToBottom () this.setSocketMessage ({sender_id: this.userCurrent.id, message: payload.message}) await this.createMessage (payload) this.message = '' this.img = ''}}, scrollToBottom () {this. $ nextTick (() => {let base = this setTimeout (() => {base. $ refs.chatBody.getElementsByClassName ('simplebar-scroll-content') [0] .scrollTop =document.getElementById ('message-container'). scrollHeight}, 500) // console.log (document.getElementById ('message-container'). scrollHeight)})}, uploadImg (e) {var file = e.target.files [0] const formData = new FormData () formData.append ('изображение', файл) api.loadImageChat (formData) .then (res => {//this.img = '
' + ' 'this.img ='
'+' '})},}, смотрите: {userMessage: {handler (val) {if (! This.check) {this.tabUsers = [] if (val! == [] && this.userMessage) {if(this.activeTab! == null && this.idUserMessage! == null) {this.chengeTab (this.activeTab, this.idUserMessage) } else if (this.userMessage.count! == undefined) { this.chengeTab (0, this.userMessage.users [0] .id) } if (val.users! == undefined) { this.virtualUser = true если (this.getContact) { if (! (val.users.find (user => user.id === this.getContact.id))) { const payload = this.getContact this.addUser (полезная нагрузка) // this.userIndex = this.userMessage.users.length - 1 this.chengeTab (this.userMessage.users.length - 1, this.getContact.id) } еще { let user = val.users.find (user => user.id === this.getContact.id) this.userIndex = val.users.indexOf (пользователь) this.chengeTab (this.userIndex, this.userMessage.users [this.userIndex] .id) } } for (пусть введите val.users) { let b = parseInt (key) === 0? правда: ложь this.tabUsers.push (б) } if (! this.getContact ||! this.virtualUser) { console.log (123) this.chatUser = val.users [0] } еще { this.virtualUser = false } } } } }, глубокий: правда } } }
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

1 Ответ

0 голосов
/ 30 января 2019

Проверяли ли вы, что какой-то компонент нужно обернуть в тег <no-ssr>?

У нас были похожие проблемы, когда у нас было ssr: false в файле конфигурации для компонента библиотеки

Это работало в режиме разработки, но не работало.

Нам пришлось обернуть компонент в тег <no-ssr>, чтобы ошибка исчезла.

...